Qt关于遇到0x00提前结束的问题 您所在的位置:网站首页 printf遇到/0 Qt关于遇到0x00提前结束的问题

Qt关于遇到0x00提前结束的问题

#Qt关于遇到0x00提前结束的问题| 来源: 网络整理| 查看: 265

目录

Qt关于遇到0x00提前结束的问题

假如有如下一个文件,数据中包含大量的0x00

1、使用QFile读取文件 QFile firmwarefile(filePath); firmwarefile.open(QIODevice::ReadOnly); //方法1:全部读取 QByteArray ba = firmwarefile.readAll(); //正确 //方法2:读一行,指定长度 char buf[1024]; qint64 lineLength; lineLength = firmwarefile.readLine(buf, sizeof(buf)); //正确,此时不要debug看buf里面的数据,因为0x00的存在,在debug中只能看到前两个字节 //方法3:读指定长度到缓冲区 int num = 1024*1;//每次读取固件大小 char *sendBuffer=new char[num](); lineLength = firmwarefile.read(sendBuffer, num); //正确,此时不要debug看sendBuffer里面的数据,因为0x00的存在,在debug中只能看到前两个字节 delete [] sendBuffer; firmwarefile.close(); 2、使用FILE读取文件 QFileInfo fileInfo = QFileInfo(filePath); QString fileName = fileInfo.fileName(); std::string str = filePath.toStdString(); FILE *fp; fopen_s(&fp, str.c_str(), "r"); char *dataBuffer = new char[fileInfo.size()](); fread(dataBuffer, fileInfo.size(), 1, fp); //正确,此时不要debug看dataBuffer里面的数据,因为0x00的存在,在debug中只能看到前两个字节 delete [] dataBuffer; fclose(fp); 3、QByteArray转char *

如果将文件数据读取到了QByteArray中,需要将QByteArray的数据取出时,可以采用如下两种方法

方法1:

QByteArray ba = firmwarefile.readAll(); char *dataBuffer = new char[ba.size()](); memcpy(dataBuffer, ba.data(), ba.size()); qDebug()


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有